
/**
 *Universidad del Valle de Guatemala
 *Algoritmos y Estructuras de Datos
 *
 * @author Luis Carlos Velasquez 11085
 * @version 3.0 built July 16 2012
 */


import java.util.Scanner;


public class Calculator {


    public static void main(String[] args) {
 
        int  numOne, numTwo, result;
      
        String in;
        String character = "";
        
        pilaVector<String> stack = new pilaVector<String>();
        Scanner scanner = new Scanner(System.in);
        
        /**
         * Controlamos el ingreso de operaciones hasta que el usuario decida salir
         */
        
	do{
		System.out.println("\n\t\t\t\t\t\"Calculadora PostFix\"" + "\n\n\t<> Ingrese la operacion en notacion PostFix" +  "\n\t<> Cada caracter debe estar separado por espacios" +
			 "\n\n\t<> Ingrese 's' para salir\n");
		
			System.out.print("\nIngrese la operacion:\t");
        in = scanner.nextLine();
        String[] split = in.split(" ");
        
 
    
        for(int i = 0; i<=split.length-1; i++){
            character = split[i];
            stack.push(character);
            /**
             * En caso sea suma con su respectiva excepcion
             */            
            if (character.equals("+")){ 
               stack.pop();
               
               try  //Contemplamos el caso en el cual intente operar una letra
               {
               	numTwo = Integer.parseInt(stack.pop());
                   numOne = Integer.parseInt(stack.pop());
                   result = numOne + numTwo;
                   stack.push(result+"");
                           
                       System.out.println(result);
               }
               catch (NumberFormatException exception)
               {
                  System.out.println ();
                  System.out.println ("Caracter no valido, revise sus operandos");
                                     
               }
        }
            /**
             * En caso sea multiplicacion con su respectiva excepcion
             */
            if (character.equals("*")){ 
                stack.pop();
                
                try
                {
                	numTwo = Integer.parseInt(stack.pop());
                    numOne = Integer.parseInt(stack.pop());
                    result = numOne * numTwo;
                    stack.push(result+"");
                            
                        System.out.println(result);
                }
                catch (NumberFormatException exception)
                {
                   System.out.println ();
                   System.out.println ("Caracter no valido, revise sus operandos");
                                      
                }
                           
        }
            
            /**
             * En caso sea resta  con su respectiva excepcion
             */
            if (character.equals("-")){ 
            stack.pop();
            
            try
            {
            	numTwo = Integer.parseInt(stack.pop());
                numOne = Integer.parseInt(stack.pop());
                result = numOne - numTwo;
                stack.push(result+"");
                        
                    System.out.println(result);
            }
            catch (NumberFormatException exception)
            {
               System.out.println ();
               System.out.println ("Caracter no valido, revise sus operandos");
                                  
            }

                    

        }
            /**
             * En caso sea division con su respectiva excepcion
             */
            if (character.equals("/")){ 
                stack.pop();
                
                try
                {
                	numTwo = Integer.parseInt(stack.pop());
                    numOne = Integer.parseInt(stack.pop());
                    result = numOne / numTwo;
                    stack.push(result+"");
                            
                        System.out.println(result);
                }
                catch (NumberFormatException exception)
                {
                   System.out.println ();
                   System.out.println ("Caracter no valido, revise sus operandos");
                                      
                }
        }
            /**
             * Cuando el usuario decide salir 
             */
            if (character.equals("s")) { 
				System.out.println("\n\n\t\t\tQue tenga un buen dia!");
				System.exit(1);
           
            }
            character = "";
        }
        
	
	}while(true);
   
    }
    
}
